/**
 * \file IPartieConsole.h
 * \author Catalin BLAJ
 * \author Vincent JACQUEMIN
 * \date 07 Novembre 2013
 *
 * Fichier header IPartieConsole.h pour le programme du Sudoku
 */

#ifndef PARTIE_H
#define PARTIE_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include <time.h>
#ifdef _WIN32
    #include <dir.h>
    #include <windows.h>
#else
    #include <sys/stat.h>
    #include <sys/types.h>
#endif

#include "SCase.h"
#include "SUnite.h"
#include "SGrille.h"
#include "SSymboles.h"
#include "AUniciteGrille.h"
#include "ILanguesConsole.h"
#include "IOutilsConsole.h"

#define couleur(param) printf("\033[%sm",param)

/*-------------------
|     FONCTIONS     |
-------------------*/

/**
 * \brief Fonction de demande de ligne et colonne à l'utilisateur.
 * \param type : Type de la grille avec laquelle le joueur est en train de jouer (donnée).
 * \param symboles : Symboles utilisés pour la partie (donnée).
 * \param langue : Langue de la partie (donnée).
 * \return Renvoie l'entier correspondant à l'indice de la case.
 *
 * Demande à l'utilisateur l'indice de la ligne et de la colonne.
 */
int IP_demanderIndiceLigneColonne(unsigned char type, const SSymboles* symboles, const Langue* langue);

/**
 * \brief Fonction de demande de valeur à l'utilisateur.
 * \param symboles : Symboles utilisés pour la partie (donnée).
 * \param langue : Langue de la partie (donnée).
 * \return Renvoie la valeur algorithmique de la valeur.
 *
 * Demande à l'utilisateur la valeur à mettre dans une case.
 */
short IP_demanderValeur(const SSymboles* symboles, const Langue* langue);

/**
 * \brief Réaction vérifier validité grille.
 * \param grille : La grille avec laquelle le joueur est en train de jouer (donnée).
 * \return Renvoie vrai si la grille est valide, faux sinon.
 *
 * Vérifie la grille si la grille est valide.
 */
bool IP_reactionVerifierValiditeGrille(const SGrille* grille);

/**
 * \brief Fonction d'affichage de la grille.
 * \param grille : La grille avec laquelle le joueur est en train de jouer (donnée).
 * \param symboles : Les symboles utilisés pour la partie (donnée)
 *
 * Affiche les candidats d'une case.
 */
void IP_afficherGrille(const SGrille* grille, const SSymboles* symboles);

/**
 * \brief Reaction quitter.
 * \param quit : Le booleen de la boucle infinie (donnée-résultat).
 *
 * Quitte la partie.
 */
void IP_reactionQuitter(bool* quitter);

/**
 * \brief Fonction de la partie elle-même.
 * \param grille : La grille sur laquelle le joueur va jouer (donnée).
 * \param grilleFinie : La grille solution (donnée).
 * \param symboles : Les symboles utilisés pour la partie (donnée).
 * \param langue : Langue de la partie (donnée).
 *
 * Permet au joueur de jouer une partie de Sudoku.
 */
void IP_session(SGrille* grille, SGrille* grilleFinie, SSymboles* symboles, const Langue* langue);

#endif
